/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package consumo.face.cadastro;

import consumo.entity.Cliente;
import consumo.entity.GrupoClientes;
import consumo.face.BaseCDIBean;
import consumo.session.ClienteSession;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import javax.inject.Inject;

/**
 *
 * @author Carlos Taschetto
 */
@ManagedBean
@ViewScoped
public class ClienteFace extends BaseCDIBean<Cliente>{

    private static final long serialVersionUID = 11L;
    @Inject
    private ClienteSession bean;
    private Cliente selectedBean;
    private List<Cliente> lista;
    private boolean isNew;
    private List<SelectItem> listaUF;
    private List<SelectItem> listaLograd;
    private SelectItem selectedTipoPessoa;
    private String docMask;

    @PostConstruct
    protected void init(){
        atribuiEstadoInicial();
    }
        
    private void atribuiEstadoInicial(){
        lista = null;
        listaLograd = null;
        listaUF = null;
        docMask = "cnpj";
        setSelectedBean(new Cliente());
    }
    
    /**
     * inicializa uma nova concessionária a ser gravada
     */
    public void doCreate(){
        setIsNew(true);
        Cliente novo = new Cliente();
        novo.setGrupoClientes(new GrupoClientes(1));
        setSelectedBean(novo);
        System.out.println("criou novo ");
    }
    /**
     * Salva a concessionária
     */
    private void doFinishCreate(){
        System.out.println("tentou salvar "+getSelectedBean());
        bean.save(getSelectedBean());
        lista = bean.getAll();
    }

    /**
     * Edita uma concessionaria
     */
    private void doEdit(){
        bean.set(getSelectedBean());
        lista = bean.getAll();
    }
    /**
     * Verifica se é uma nova inserção ou uma alteração
     */
    public void doSave(){
        System.out.println(isIsNew());
        if(isIsNew())
            doFinishCreate();
        else doEdit();
        setIsNew(false);
    }
    
    public void doRemove(){
        bean.remove(getSelectedBean());
        setLista(bean.getAll());
    }

    public List<Cliente> getLista() {
        if(lista == null){
            lista = bean.getAll();
        }
        return lista;
    }

    public void setLista(List<Cliente> lista) {
        this.lista = lista;
    }

    public boolean isIsNew() {
        return isNew;
    }

    public void setIsNew(boolean isNew) {
        this.isNew = isNew;
    }

    public void resetIsNew(){
        this.isNew = false;
    }
    
    public List<SelectItem> getListaLograd(){
        if(listaLograd == null){
            listaLograd = new ArrayList<SelectItem>();
            listaLograd.add(new SelectItem("Alameda", "Alameda"));
            listaLograd.add(new SelectItem("Avenida", "Avenida"));
            listaLograd.add(new SelectItem("Condomínio", "Condomínio"));
            listaLograd.add(new SelectItem("Conjunto", "Conjunto"));
            listaLograd.add(new SelectItem("Distrito", "Distrito"));
            listaLograd.add(new SelectItem("Estação", "Estação"));
            listaLograd.add(new SelectItem("Estrada", "Estrada"));
            listaLograd.add(new SelectItem("Fazenda", "Fazenda"));
            listaLograd.add(new SelectItem("Jardim", "Jardim"));
            listaLograd.add(new SelectItem("Ladeira", "Ladeira"));
            listaLograd.add(new SelectItem("Largo", "Largo"));
            listaLograd.add(new SelectItem("Loteamento", "Loteamento"));
            listaLograd.add(new SelectItem("Morro", "Morro"));
            listaLograd.add(new SelectItem("Quadra", "Quadra"));            
            listaLograd.add(new SelectItem("Rodovia", "Rodovia"));
            listaLograd.add(new SelectItem("Rua", "Rua"));
            listaLograd.add(new SelectItem("Travessa", "Travessa"));
            listaLograd.add(new SelectItem("Trevo", "Trevo"));
            listaLograd.add(new SelectItem("Via", "VIa"));
            listaLograd.add(new SelectItem("Vila", "Vila"));
        }
        return listaLograd;
    }
    
    public List<SelectItem> getListaUF() {
        if(listaUF == null){
            listaUF = new ArrayList<SelectItem>();
            listaUF.add(new SelectItem("AC", "AC"));
            listaUF.add(new SelectItem("ES","ES"));
            listaUF.add(new SelectItem("PR","PR"));
            listaUF.add(new SelectItem("RJ","RJ"));
            listaUF.add(new SelectItem("RS","RS"));
            listaUF.add(new SelectItem("SC","SC"));
            listaUF.add(new SelectItem("SP","SP"));
            
        }
        return listaUF;
    }

    public SelectItem getSelectedTipoPessoa() {        
        return selectedTipoPessoa;
    }

    public void setSelectedTipoPessoa(SelectItem selectedTipoPessoa) {
        this.selectedTipoPessoa = selectedTipoPessoa;
    }

    public String getDocMask() {
        return docMask;
    }

    public void setDocMask(String docMask) {
        this.docMask = docMask;
    }

    @Override
    public Cliente getSelectedBean() {
        if(selectedBean.getCnpj() !=null){
            if(selectedBean.getCnpj().length()==11){
                docMask="cpf";
            }else{
                docMask="cnpj";
            }}
        //if(selectedBean.getId() !=null)
        selectedBean = cleanFileds(selectedBean);
        return selectedBean;
    }

    //retira as mascaras dos campos
    private Cliente cleanFileds(Cliente entidade){
        entidade.setCnpj(limpar(entidade.getCnpj()));
        entidade.setFax(limpar(entidade.getFax()));
        entidade.setFone(limpar(entidade.getFone()));
        return entidade;
    }
    
    private String limpar(String campo){
        if(campo !=null)
            campo = campo.replaceAll("[()-./ ]", "");
        return campo;
    }
    
    @Override
    public void setSelectedBean(Cliente selectedBean) {
        this.selectedBean = selectedBean;
    }

    
    
}
